/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.its.dsw2.biblioteca.bl;

import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import mx.its.dsw2.biblioteca.DetallePrestamo;
import mx.its.dsw2.biblioteca.Libro;
import mx.its.dsw2.biblioteca.Prestamo;
import mx.its.dsw2.biblioteca.Usuario;
import mx.its.dsw2.biblioteca.dao.DetallePrestamoDaoLocal;
import mx.its.dsw2.biblioteca.dao.PrestamoDaoLocal;
import mx.its.dsw2.biblioteca.enumeracion.EstadoDetallePrestamo;
import mx.its.dsw2.biblioteca.enumeracion.EstadoTransaccion;

/**
 *
 * @author Piter
 */
@Stateless
public class PrestamoBl implements PrestamoBlLocal {
    @EJB
    private DetallePrestamoDaoLocal detallePrestamoDao;
    @EJB
    private PrestamoDaoLocal prestamoDao;

    @Override
    public EstadoTransaccion register(Prestamo lend, List<Libro> book) {
        int avaliable=3;
        List<Prestamo> incompleteLends=
                prestamoDao.findIncomplete(lend.getIdUsuario());
        for(Prestamo p: incompleteLends){
            avaliable=avaliable-detallePrestamoDao.findledens(p).size();
      }
        if(avaliable<=0|| book.size()>avaliable){
            return EstadoTransaccion.INCOMPLETO;
        }else{
            prestamoDao.create(lend);
            for (Libro b : book) {
                DetallePrestamo dp=new DetallePrestamo();
                dp.setIdLibro(b);
                dp.setIdPrestamo(lend);
                dp.setEstado(EstadoDetallePrestamo.PRESTADO.ordinal());
                detallePrestamoDao.create(dp);
                
            }
        }
        
        return EstadoTransaccion.COMPLETO;
        
    }

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")

    @Override
    public EstadoTransaccion takeBack(List<Libro> books) {
     for(Libro book : books){
         DetallePrestamo dp=detallePrestamoDao.findBooks(book);
         if(dp==null){
             return EstadoTransaccion.INCOMPLETO;
             
         }else{
             dp.setEstado(EstadoDetallePrestamo.REGRESADO.ordinal());
             detallePrestamoDao.edit(dp);
         }
     }
        return null;
    }

    @Override
    public List<Prestamo> incompleteLendsByUser(Usuario user) {
        
        return prestamoDao.findIncomplete(user);
    }

    @Override
    public List<DetallePrestamo> lendsBooksByUser(Usuario user) {
        return null;
    }

    @Override
    public List<Prestamo> generalIncompleteLends() {
        return null;
    }

    @Override
    public List<DetallePrestamo> generalLendsBooks() {
        return null;
    }
    

}
